/**
 * 将 Date 格式的日期格式化为字符串
 * 
 * @memberof date
 * 
 * @param {Date} date 日期(必传)
 * 
 * @param {String} fmt 字符串格式（可选）
 * <br /> 默认为 yyyy-MM-dd hh:mm:ss 
 * <br /> 可通过 fmt 获取年月日，如传入 MM 获取日期月份 
 * 
 * @returns 日期字符串
 * 
 * @example  
 * dateFormat(new Date()); // 2021-02-01 10:08:38
 * dateFormat(new Date(),'MM'); // 02
 */
function dateFormat(date, fmt) {
    const {isType} = this;
    if(!isType(date,'Date')){
        return 'date needs to be Date()'
    }
    fmt = fmt || 'yyyy-MM-dd hh:mm:ss'
    const o = {
        'M+': date.getMonth() + 1,
        'd+': date.getDate(),
        'h+': date.getHours(),
        'm+': date.getMinutes(),
        's+': date.getSeconds()
    }
    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
    }
    for (const k in o) {
        if (new RegExp(`(${k})`).test(fmt)) {
            const str = o[k] + ''
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : ('00' + str).substr(str.length))
        }
    }
    return fmt
}
/**
 * 计算一个基于指定日期的新日期
 * 
 * @memberof date
 * 
 * @param {Number} hour 小时(必传)
 * <br /> 要计算的新日期和指定日期的小时差
 * <br /> + 代表以后的日期，- 代表以前的日期
 * <br /> 默认为0
 * 
 * @param {Date} base 指定日期（可选）
 * <br /> 默认为 new Date()
 * 
 * @returns Date 格式的日期
 * 
 * @example  
 * getDate(-2); // 2021-02-01T04:41:44.781Z
 * getDate(24 * 3, new Date('2020-10-10')); // 2020-10-13T00:00:00.000Z
 */
function getDate(hour, base) {
    hour = hour || 0
    base = base || new Date()
    const {isType} = this;
    if(!isType(base,'Date')){
        return 'base needs to be Date()'
    }
    const baseTime  = base.getTime()
    const newTime =  baseTime + hour * (3600 * 1000)
    return new Date(newTime)
}
module.exports.dateFormat = dateFormat
module.exports.getDate = getDate
